class Solution {
    public double myPow(double x, int n) {
        if (n == 0) return 1; // 任何数的 0 次幂都是 1

        // 处理 n 为负数的情况
        long N = n; // 使用 long 避免 n = -2^31 时取反溢出
        if (N < 0) {
            x = 1 / x; // 取倒数
            N = -N;    // 将 n 转为正数
        }

        double result = 1;
        while (N > 0) {
            if (N % 2 == 1) { // 如果当前二进制位为 1
                result *= x; // 将当前结果乘以 x
            }
            x *= x; // 将 x 平方
            N /= 2; // 右移一位，处理下一个二进制位
        }
        return result;

    }
}

class Solution1 {
    public int halveArray(int[] nums) {
        int ret=0;
        double sum=0;
        for(int num:nums) sum+=num;

        PriorityQueue<Double> q=new PriorityQueue<>((a,b)-> b.compareTo(a));
        for(int num:nums) q.offer((double)num);
        double sum1=0;
        while(sum1<sum/2){
            double half=q.poll()/2;
            sum1+=half;
            q.offer(half);
            ret++;

        }
        return ret;


    }
}